package com.archive.core.table;

import lombok.Data;

import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 归档表
 */
@Data
public class ArchiveTable {

    /**
     * 是否启用归档，默认启用
     */
    private boolean enabled = true;

    /**
     * 表名
     */
    private String tableName;

    /**
     * 层级表名,一张表被多个父表关联时的唯一名称
     */
    private String levelTableName;

    /**
     * 别名
     */
    private String shortName;

    /**
     * 主键名
     */
    private String primaryKey;

    /**
     * 主键列位置
     */
    private Integer primaryKeyIndex;

    /**
     * 索引名称（使用强制索引）
     */
    private String indexName;

    /**
     * 提取字段，用于聚合数据表字段，传递到下一级做数据过滤
     */
    private List<String> extractColumns;

    /**
     * 表字段
     */
    private List<ArchiveColumn> columns;

    /**
     * 关联的上一级主表
     * <p>主表信息作为主要过滤条件需要传递到下一级</p>
     */
    private ArchiveTable parentTable;

    /**
     * 关联表
     */
    private List<ArchiveTable> relatedTables;

    /**
     * 归档批次大小
     */
    private Integer batchSize = 1000;

    /**
     * 归档条件，用于查询归档数据
     */
    private String archiveCondition;

    private Set<String> extractConditions = new HashSet<>();

    /**
     * 列名称
     */
    private String[] columnNames;

    /**
     * 归档原始数据
     */
    private List<Object[]> data;

    /**
     * extractColumns字段提取的数据
     */
    private Map<String, List<Object>> extractDataMap;

    public void clear() {
        this.data = null;
        this.extractDataMap = null;
    }

    public boolean hasRelatedTables() {
        return this.relatedTables != null && !this.relatedTables.isEmpty();
    }

}
